/*
 * Copyright © 2020-present LiuDanYang. All rights Reserved.
 */

import { handleUrlQuery } from "./index";
import {showToast} from '@/uni_modules/deary-utils/js_sdk/uniapp'

/**
 * 跳转到指定的页面
 * @param url {string} 页面路径
 * @param params {object} 页面参数
 * @param type {string} 页面跳转类型 navigateTo: 保留当前页面    redirectTo: 关闭当前页面    reLaunch: 关闭所有页面    switchTab: 跳转到 tabBar 页面
 */
export function generalJump(url, params = {}, type = "navigateTo") {
  if (JSON.stringify(params) !== "{}") {
    url = handleUrlQuery(url, params);
  }

  const failFn = (err) => {
    if (err.errMsg) {
      // 包含 not found
      if (err.errMsg.includes("not found")) {
        showToast("页面不存在")
      } else {
        switchTab(url);
      }
    }
  }

  if (type === "navigateTo") {
    uni.navigateTo({
      url,
      fail(err) {
        failFn(err)
      }
    });
  } else if (type === "redirectTo") {
    uni.redirectTo({
      url,
      fail(err) {
        failFn(url);
      }
    });
  } else if (type === "reLaunch") {
    uni.reLaunch({
      url,
      fail(err) {
        failFn(url);
      }
    });
  } else if (type === "switchTab") {
    uni.switchTab({
      url
    });
  }
}

/**
 * uni.navigateTo(OBJECT)
 * 保留当前页面，跳转到应用内的某个页面，使用uni.navigateBack可以返回到原页面。
 * @param url {String} 页面路由
 * See：{@link https://uniapp.dcloud.io/api/router?id=navigateto 文档}
 */
export function navigateTo(url) {
  uni.navigateTo({
    url: url
  });
}

/**
 * uni.redirectTo(OBJECT)
 * 关闭当前页面，跳转到应用内的某个页面。
 * @param url {String} 页面路由
 * See：{@link https://uniapp.dcloud.io/api/router?id=redirectto 文档}
 */
export function redirectTo(url) {
  uni.redirectTo({
    url: url
  });
}

/**
 * uni.reLaunch(OBJECT)
 * 关闭所有页面，打开到应用内的某个页面。
 * @param url {String} 页面路由
 * See：{@link https://uniapp.dcloud.io/api/router?id=relaunch 文档}
 */
export function reLaunch(url) {
  uni.reLaunch({
    url: url
  });
}

/**
 * uni.switchTab(OBJECT)
 * 跳转到 tabBar 页面，并关闭其他所有非 tabBar 页面。
 * @param url {String} 页面路由
 * See：{@link https://uniapp.dcloud.io/api/router?id=switchtab 文档}
 */
export function switchTab(url) {
  uni.switchTab({
    url: url
  });
}

/**
 * uni.navigateBack(OBJECT)
 * 关闭当前页面，返回上一页面或多级页面。可通过 getCurrentPages() 获取当前的页面栈，决定需要返回几层。
 * @param delta {Number} 返回的页面数
 * @param path {String} 返回的页面路径
 * See：{@link https://uniapp.dcloud.io/api/router?id=navigateback 文档}
 */
export function navigateBack(delta = 1, path = "/") {
  // eslint-disable-next-line no-undef
  const pages = getCurrentPages();
  if (pages.length <= 1) {
    reLaunch(path);
  } else {
    uni.navigateBack({
      delta: delta
    });
  }
}
